#ifndef _MESSAGE_H_
#define _MESSAGE_H_


#include "Common.h"
#include "String.h"
#include "Singleton.h"
#include "Threading/Mutex.h"


#include <map>
typedef struct  system_message_tag_
{
/* !#AUTO DATABASE TABLE SYSTEM_MESSAGE FETCH */
		/* '服务器信息id'*/
		uint32 		msg_id;
		/* '信息名称（英文或者拼音)'*/
		String 		msg_name;
		/* '信息内容'*/
		String 		message;
		/* '消息类型 0 无效类型 1 服务器消息 2 警告消息 3 错误消息'*/
		uint32		type;
		/* '0 无效信息 1为有效信息 2 无效的信息'*/
		uint32 		status;
/* #END DATABASE */

}sysMessage_t;


class SERVER_DECL sMessage : public Singleton< sMessage > 
{
public:
	sMessage();
	~sMessage();

	const String & getMessage(const uint32 & handle);
	const String & getMessage(const String & name);

	uint32	getType(const uint32 & handle);
	uint32	getType(const String & name);
	
	uint32 getStatus(const uint32 & handle);
	uint32 getStatus(const String & name);

	sysMessage_t * getByHandle(const uint32 & handle);
	sysMessage_t * getByName(const String & name);

	//清除所有的信息Cache
	void	clear(void);
private:
	std::map<String,sysMessage_t*>	m_message_name_handle;
	std::map<uint32,sysMessage_t*>  m_message_handle;
	std::list<sysMessage_t*>	m_messages;
	Mutex		m_lock;

	sysMessage_t *	loadByHandle(const uint32 & handle);
	sysMessage_t *	loadByName(const String & name);
 
};



#define   sMsg   sMessage::getSingleton()

#endif
